Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Commit e4a1b54e980adadfa706634845a7df1c5f08b5c0


Parents : 8507474
Author : Ivan <ivan@quad4.io>
Signature : Invalid signer <e46112d44649266d71fe2193e00a4710>, author is <ivan@quad4.io>
Date : 2026-07-05T01:23:40-05:00

feat(ci): add preview-dev release workflow and enhance draft release notes for preview tags

Changes
Diff

diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml
index 1d0e8e49..bb99c294 100644
--- a/.github/workflows/build-release.yml
+++ b/.github/workflows/build-release.yml
@@ -541,7 +541,7 @@ jobs:
provenance-name: meshchatx-android-flatpak-${{ github.ref_name }}.intoto.jsonl
draft-github-release:
- name: ${{ startsWith(github.ref_name, 'preview-') && 'Preview GitHub release (all assets + SLSA)' || 'Draft GitHub release (all assets + SLSA)' }}
+ name: ${{ startsWith(github.ref_name, 'preview-dev-') && 'Preview dev GitHub release (all assets + SLSA)' || (startsWith(github.ref_name, 'preview-') && 'Preview GitHub release (all assets + SLSA)') || 'Draft GitHub release (all assets + SLSA)' }}
needs:
- linux-release
- collect-linux-slsa-subjects

diff --git a/.github/workflows/preview-dev.yml b/.github/workflows/preview-dev.yml
new file mode 100644
index 00000000..d796bb0c
--- /dev/null
+++ b/.github/workflows/preview-dev.yml
@@ -0,0 +1,88 @@
+# Weekly preview builds from dev: push a preview-dev-* tag when dev has new
+# commits since the last dev prerelease, which triggers build-release.yml.
+#
+# Pinned first-party actions (bump tag and SHA together when upgrading):
+# actions/checkout@v6.0.1 8e8c483db84b4bee98b60c0593521ed34d9990e8
+#
+name: Preview Dev Release
+
+on:
+ schedule:
+ - cron: "0 7 * * 0"
+ workflow_dispatch:
+
+concurrency:
+ group: preview-release-dev
+ cancel-in-progress: false
+
+permissions:
+ contents: read
+
+jobs:
+ metadata:
+ name: Prepare preview-dev tag
+ runs-on: ubuntu-latest
+ outputs:
+ tag_name: ${{ steps.meta.outputs.tag_name }}
+ commit_sha: ${{ steps.meta.outputs.commit_sha }}
+ skip_release: ${{ steps.meta.outputs.skip_release }}
+ steps:
+ - name: Checkout
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with:
+ ref: dev
+ fetch-depth: 0
+
+ - name: Compute preview-dev tag
+ id: meta
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ set -euo pipefail
+ short_sha="$(git rev-parse --short=7 HEAD)"
+ full_sha="$(git rev-parse HEAD)"
+ tag="preview-dev-$(date -u +%Y.%m.%d)-${short_sha}"
+
+ skip_release=false
+ if [ "${{ github.event_name }}" = "schedule" ]; then
+ last_preview_sha="$(gh release list --limit 50 --json tagName,isPrerelease,targetCommitish \
+ --jq '[.[] | select(.isPrerelease) | select(.tagName | startswith("preview-dev-"))][0].targetCommitish // empty')"
+ if [ -n "${last_preview_sha}" ] && [ "${last_preview_sha}" = "${full_sha}" ]; then
+ echo "No new commits on dev since last preview-dev (${last_preview_sha}); skipping scheduled release."
+ skip_release=true
+ fi
+ fi
+
+ echo "tag_name=${tag}" >> "$GITHUB_OUTPUT"
+ echo "commit_sha=${full_sha}" >> "$GITHUB_OUTPUT"
+ echo "skip_release=${skip_release}" >> "$GITHUB_OUTPUT"
+ echo "Preview-dev tag: ${tag} @ ${full_sha} (skip_release=${skip_release})"
+
+ tag:
+ name: Tag dev and trigger build-release
+ needs: metadata
+ if: needs.metadata.outputs.skip_release != 'true'
+ runs-on: ubuntu-latest
+ permissions:
+ contents: write
+ steps:
+ - name: Checkout
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with:
+ ref: dev
+ fetch-depth: 0
+
+ - name: Create and push preview-dev tag
+ env:
+ TAG: ${{ needs.metadata.outputs.tag_name }}
+ SHA: ${{ needs.metadata.outputs.commit_sha }}
+ run: |
+ set -euo pipefail
+ if git rev-parse "refs/tags/${TAG}" >/dev/null 2>&1; then
+ echo "Tag ${TAG} already exists; skipping push."
+ exit 0
+ fi
+ git config user.name "github-actions[bot]"
+ git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
+ git tag -a "${TAG}" -m "Weekly preview-dev build for ${SHA}" "${SHA}"
+ git push origin "${TAG}"

diff --git a/.github/workflows/preview-release.yml b/.github/workflows/preview-release.yml
index 43ca4cde..5c1c9268 100644
--- a/.github/workflows/preview-release.yml
+++ b/.github/workflows/preview-release.yml
@@ -46,7 +46,7 @@ jobs:
skip_release=false
if [ "${{ github.event_name }}" = "schedule" ]; then
last_preview_sha="$(gh release list --limit 50 --json tagName,isPrerelease,targetCommitish \
- --jq '[.[] | select(.isPrerelease) | select(.tagName | startswith("preview-"))][0].targetCommitish // empty')"
+ --jq '[.[] | select(.isPrerelease) | select(.tagName | startswith("preview-")) | select(.tagName | startswith("preview-dev-") | not)][0].targetCommitish // empty')"
if [ -n "${last_preview_sha}" ] && [ "${last_preview_sha}" = "${full_sha}" ]; then
echo "No new commits on master since last preview (${last_preview_sha}); skipping scheduled release."
skip_release=true

diff --git a/scripts/ci/github-draft-release-upload-assets.sh b/scripts/ci/github-draft-release-upload-assets.sh
index 822bcde7..b69222b4 100644
--- a/scripts/ci/github-draft-release-upload-assets.sh
+++ b/scripts/ci/github-draft-release-upload-assets.sh
@@ -86,7 +86,12 @@ done
mapfile -t files < <(find "$STAGE" -type f)
{
- if [[ "$TAG" == preview-* ]]; then
+ if [[ "$TAG" == preview-dev-* ]]; then
+ echo "**Preview release (dev)** — automated weekly snapshot from \`dev\`. Not a stable release; use tagged production releases for daily use."
+ echo
+ echo "Commit: \`${GITHUB_SHA:-unknown}\`"
+ echo
+ elif [[ "$TAG" == preview-* ]]; then
echo "**Preview release** — automated weekly snapshot from \`master\`. Not a stable release; use tagged production releases for daily use."
echo
echo "Commit: \`${GITHUB_SHA:-unknown}\`"


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────